Vendors produce and sell devices such as solid state devices or drives (SSDs) that are then connected to a host computer system such as a server. Such devices may also be known as embedded devices or embedded systems.
To promote use and facilitate development of SSDs, the Non-Volatile Memory Express (NVMe) standard was developed by a consortium of SSD vendors. NVMe-compliant devices support use of the NVMe protocol, and a standard (open source) NVMe software driver is executed by the host system. Before the NVMe standard was established, each vendor usually provided their own proprietary software driver that could be installed on the host system so that the host could communicate with their SSD. With the advent of the NVMe standard, vendors can build SSDs that work with the standard driver, precluding the need for a proprietary driver on the host system and thus making it easier for their SSDs to be installed in different hosts (plug and play). Standardizing the interface with the SSDs also makes it easier to design host systems, since they do not have to be able to accommodate different designs and behaviors.
Some vendors also provided a debugging framework that included proprietary software tools or utilities that could be used to collect information (e.g., crash dumps, logs, etc.) from the SSD in the event of a problem of some sort. The information was useful because it allowed those vendors to diagnose and correct the source of a problem. Vendors that spent time and money developing non-standard (proprietary) debugging frameworks before the NVMe standard was in place would like to be able to continue to use their framework even with standards-based devices. However, it is difficult and perhaps not possible to use a proprietary debugging framework with the standard driver. For example, a standards-based device does not have the same interfaces as a proprietary device, so tools and utilities previously used to collect information from a proprietary device may not work with a standards-based device.